import math

from typing import Any, Optional, List, Dict, Tuple, Set, Union

"""液化判别"""

def get_d0(seismic_intensity: str, soil_type: str) -> int:
    """
    计算液化土特征深度
    
    参数：
    
    seismic_intensity (str): 抗震设防烈度 [-]，取值："7", "7.5", "8", "8.5", "9"
    
    soil_type (str): 饱和土的类别 [-]，取值："粉土"，"砂土"，"其它"
    
    返回：
    
    (int): 液化土特征深度 [m]
    """
    ...
def get_N0(seismic_intensity: str) -> int:
    """
    计算液化判别标准贯入锤击数基准值N0
    
    参数：
    
    seismic_intensity (str): 抗震设防烈度 [-]，取值："7", "7.5", "8", "8.5", "9"
    
    返回：
    
    (int): N0 [-]
    """
    ...
def get_beta(seismic_group: int) -> float:
    """
    计算Ncr所需的调整系数beta
    
    参数：
    
    seismic_group (int): 设计地震分组 [-]，取值：第一组取1，第二组取2，第三组取3
    
    返回：
    
    (float): beta值 [-]
    """
    ...
def liq_init_justify(seismic_intensity: str, soil_type: str, du: float, db: float, dw: float) -> tuple[float, float, float, float, str]:
    """
    液化初步判别
    
    参数：
    
    seismic_intensity (str): 抗震设防烈度 [-]，取值："7", "7.5", "8", "8.5", "9"
    
    soil_type (str): 饱和土的类别 [-]，取值："粉土"，"砂土"，"其它"
    
    du (float): 上覆盖非液化土层厚度 [m]
    
    db (float): 基础埋置深度 [m]
    
    dw (float): 地下水的埋藏深度 [m]
    
    返回：
    
    (float): d0 + db - 2.0的计算结果
    
    (float): d0 + db - 3.0的计算结果
    
    (float): du + dw的计算结果
    
    (float): 1.5 * d0 + 2.0 * db - 4.5的计算结果
    
    (str): "可不考虑液化"或"可能液化"
    """
    ...
def liq_init_justify2(seismic_intensity: str, is_before_q4: bool, soil_type: str, rho_c: float, du: float, db: float, dw: float) -> tuple[int, float, float, float, float, int, str]:
    """
    液化初步判别
    
    参数：
    
    seismic_intensity (str): 抗震设防烈度 [-]，取值："6", "7", "7.5", "8", "8.5", "9"
    
    is_before_q4 (bool): 地质年代是否Q4以前（不含Q4） [-]
    
    soil_type (str): 饱和土的类别 [-]，取值："粉土"，"砂土"
    
    rho_c (float): 粉土的黏粒含量百分率 [%]
    
    du (float): 上覆盖非液化土层厚度 [m]
    
    db (float): 基础埋置深度 [m]，小于2m取2m
    
    dw (float): 地下水的埋藏深度 [m]
    
    返回：
    
    (int): d0的取值
    
    (float): d0 + db - 2.0的计算结果
    
    (float): d0 + db - 3.0的计算结果
    
    (float): du + dw的计算结果
    
    (float): 1.5 * d0 + 2.0 * db - 4.5的计算结果
    
    (int): 0为"可不考虑液化"，1为"可能液化"
    
    (str): "可不考虑液化"或"可能液化"
    """
    ...
def n_cr_cal(seismic_intensity: str, seismic_group: int, ds: float, rho_c: float, dw: float) -> tuple[int, float]:
    """
    液化判别标准贯入锤击数临界值计算
    
    参数：
    
    seismic_intensity (str): 抗震设防烈度 [-]，取值："7", "7.5", "8", "8.5", "9"
    
    seismic_group (int): 设计地震分组 [-]，取值：1, 2, 3
    
    ds (float): 饱和土标准贯入点深度 [m]
    
    rho_c (float): 黏粒含量百分率，砂土直接取3、粉土小于3取3（粉土按该标贯试验段深度范围内的室内试验黏粒含量指标）
    
    dw (float): 地下水位深度 [m]
    
    返回：
    
    (int): 标准贯入锤击数基准值N0
    
    (float): 液化判别标准贯入锤击数临界值
    """
    ...
def liq_detail_justify(n_real: int, n_cr: float) -> tuple[int, str]:
    """
    液化详细判别
    
    参数：
    
    n_real (int): 未经杆长修正的饱和土标准贯入锤击数实测值
    
    n_cr (float): 液化判别标准贯入锤击数临界值
    
    返回：
    
    (int): 0：详判非液化土层；1：详判是液化土层
    
    (str): "液化"或"不液化"
    """
    ...
def one_liq_index_calc(n_real: int, n_cr: float, d: float, d_mid: float) -> float:
    """
    单个液化指数计算
    
    参数：
    
    n_real (int): 各个液化点处的标贯锤击数的实测值（非液化点不参与计算）
    
    n_cr (float): 各个液化点处的标贯锤击数的临界值（非液化点不参与计算）
    
    d (float]): 各个液化点所代表的土层厚度 [m]（可采用与该标准贯入试验点相邻的上、下两标准贯入试验点深度差的一半，但上界不高于地下水位深度，下界不深于液化深度）
    
    d_mid (float): 各个液化点所代表土层的中点深度（不是标贯点深度）
    
    返回：
    
    (float): 单个液化指数
    """
    ...
def liq_index_calc(n: int, n_real: list[int], n_cr: list[float], d: list[float], d_mid: list[float]) -> float:
    """
    液化指数计算
    
    参数：
    
    n (int): 在判别深度范围内，每个钻孔中标准贯入试验点的总数
    
    n_real (list[int]): 各个液化点处的标贯锤击数的实测值（非液化点不参与计算）
    
    n_cr (list[float]): 各个液化点处的标贯锤击数的临界值（非液化点不参与计算）
    
    d (list[float]): 各个液化点所代表的土层厚度 [m]（可采用与该标准贯入试验点相邻的上、下两标准贯入试验点深度差的一半，但上界不高于地下水位深度，下界不深于液化深度）
    
    d_mid (list[float]): 各个液化点所代表土层的中点深度（不是标贯点深度）
    
    返回：
    
    (float): 液化指数
    """
    ...
def liq_class_justify(liq_index: float) -> str:
    """
    液化等级判定
    
    参数：
    
    liq_index (float): 液化指数
    
    返回：
    
    (str): 液化等级
    """
    ...
def one_liq_reduce_factor_calc(n_real: int, n_cr: float, ds: float) -> str:
    """
    液化等级判定
    
    参数：
    
    n_real (int): 各个液化点处的标贯锤击数的实测值（非液化点不参与计算）
    
    n_cr (float): 各个液化点处的标贯锤击数的临界值（非液化点不参与计算）
    
    ds (float): 饱和土标准贯入点深度 [m]
    
    返回：
    
    (str): 折减系数
    """
    ...
